package com.nuanshui.heatedloan.fund.facade;

import com.nuanshui.heatedloan.dubbo.DubboResponse;
import com.nuanshui.heatedloan.fund.form.UseFundForm;
import com.nuanshui.heatedloan.fund.model.CashingApplyInfo;
import com.nuanshui.heatedloan.fund.model.UserFundAction;
import com.nuanshui.heatedloan.fund.model.UserFundActionDetail;
import org.springframework.data.domain.Pageable;

import java.util.List;




/**
 * 用户资金流动service
 * @ClassName: UserFundActionService 
 * @author guohao
 * @date Jan 4, 2016 4:06:32 PM 
 */
public interface UserFundActionService {

	/**
	 * 获取某个 用户的总的资金
	 * @param 
	 * @author guohao
	 * @date Jan 4, 2016 3:33:35 PM
	 * @since 2.3.0
	 */
    DubboResponse loadTotalFund(String userId);
	/**
	 * 保存自己动态
	 * @param 
	 * @author guohao
	 * @date Jan 4, 2016 3:34:16 PM
	 * @sine 2.3.0
	 */
    void saveUserFundAction(UserFundAction userFundAction);
	
	/**
	 * 获取某个用户某中类型的处于某种流转状态的资金动态
	 * @param  userId 用户id
	 * @param actionType 资金流动类型
	 * @param status  流动的状态
	 * @author guohao
	 * @date Jan 4, 2016 3:35:01 PM
	 * @since 2.3.0
	 */
    List<UserFundAction> findByActionType(String userId, Integer actionType, int status, Pageable pager);
	
	/**
	 * 获取某个用户某种类型的已流转完成的资金动态
	 * @param  userId 用户id
	 * @param actionType 资金流动类型
	 * @author guohao
	 * @date Jan 4, 2016 3:35:01 PM
	 * @since 2.3.0
	 */
    List<UserFundAction> findCompleteUserFundActionByActionType(String userId, Integer actionType);
	
	/**
	 * 根据订单号获取充值订单记录
	 * @param 
	 * @author guohao
	 * @date Jan 6, 2016 2:10:00 PM
	 */
    UserFundAction loadCreditUserFundAction(String orderNum);
	
	
	/**
	 * 获取用户的充值订单号
	 * @param money 要充值的金额
	 * @param platfrom 使用什么
	 * @author guohao
	 * @date Jan 6, 2016 2:37:35 PM
	 */
    String loadRechargeOrderNum(Long money, String curUserId);
	
	
	/**
	 * 确认用户的充值
	 * @param money 充值的金额
	 * @param orderNum 充值的订单
	 * @author guohao
	 * @date Jan 6, 2016 3:01:12 PM
	 */
    boolean confirmUserRechange(Long money, String orderNum, String payType);
	
	/**
	 * 审核用户提现
	 * @author Junyan2015
	 * @date 2016年1月25日 下午2:53:35
	 * @param fundId 提现ID
	 * @param isPass 是否通过，1为通过，0为不通过
	 */
    boolean checkUserCashing(String fundId, Integer isPass, String billId);
	
	/**
	 * 根据提现ID获得相关信息
	 * @author Junyan2015
	 * @date 2016年1月25日 下午5:54:23
	 * @param fundId 提现id
	 * @return
	 */
    CashingApplyInfo getUserFundActionById(String fundId);
	
	/**
	 * 管理员获取all users某中类型的处于某种流转状态的资金动态
	 * @author Junyan2015
	 * @date 2016年1月27日 下午3:00:09
	 * @param userId 用户id
	 * @param actionType 资金流动类型
	 * @param status 流动的状态
	 * @param pager
	 * @return
	 */
    List<UserFundAction> findByActionTypeInManager(String userId, Integer actionType, int status, Pageable pager);
	
	/**
	 * 话费余额
	 * @param @param userFundAction
	 * @param @return
	 * @author guohao
	 * @date 2017年1月11日 上午11:26:25
	 * @since $
	 */
    boolean payGoodsMoney(UserFundAction  userFundAction);
	

	/**
	 * 使用余额缴纳保证金
	 * @param 
	 * @author zhangqing
	 * @date 2016年3月4日 下午5:21:30
	 * @since 2.5.0
	 */
    String payFreezeFund(Long money, String currentUserId);

	
	UserFundActionDetail loadUserFundActionDetailByDealNum(String dealNum);
	
	/**
	 * 用户提现
	 * @param money (提现的金额单位为分)
	 * @author guohao
	 * @date 2016年7月7日 下午3:45:34
	 * @since $
	 */
    boolean  drawCash(Long money, String userId, String platform);
	
	/**
	 * 用户使用余额
	 * @param @return
	 * @author guohao
	 * @date 2016年7月8日 下午4:58:41
	 * @since $
	 */
    DubboResponse useFund(UseFundForm useFundForm);
	
	/**
	 * 根据订单号获取
	 * @param @param dealNum
	 * @param @return
	 * @author guohao
	 * @date 2016年7月21日 下午7:46:32
	 * @since $
	 */
    UserFundAction loadByDealNum(String dealNum);
	
	/**
	 * 取消订单退换用户的金额和玉币
	 * @param @param useFundForm
	 * @param @return
	 * @author guohao
	 * @date 2016年8月2日 上午11:37:13
	 * @since $
	 */
    DubboResponse refundUserFund(UseFundForm useFundForm);
	void saveUserFundActionJustSave(UserFundAction userFundAction);
	Long loadSeverChargeByOrderId(String id);
	void insertFundActionDetail(UserFundActionDetail userFundActionDetail);
	String payMembershipFee(long m, String userId);
	
	/**
	 * 根据支付号，获取分批支付的子交易号
	 * @author Gonzo
	 * @date 2016年11月2日下午2:05:34
	 * @param orderNumber
	 * @return
	 */
    String loadBatchPayNum(String orderNumber, Long totalPrice, String title, Integer batchOrderNumType);
}
